﻿Imports System.Data.SqlClient
Imports DevExpress.XtraReports.UI

Public Class frmConsultarPuntos
    Dim UltFactMonica, UltFacturaLocal As Integer
    Private Sub btnBuscar_Click(sender As Object, e As EventArgs) Handles btnBuscar.Click
        If Me.txtCodigoCliente.EditValue IsNot Nothing Then
            'Llamamos a buscar
            UltimaFacturaMonica()
            UltimaFacturaLocal()
            SincronizarFacturas()
        Else
            Me.txtCodigoCliente.BackColor = Color.LemonChiffon
            MessageBox.Show("Ingrese el codigo del cliente.", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Warning)
            Me.txtCodigoCliente.Focus()
        End If
    End Sub

    Private Sub txtCodigoCliente_EditValueChanged(sender As Object, e As EventArgs) Handles txtCodigoCliente.EditValueChanged
        Me.txtCodigoCliente.BackColor = Color.White
    End Sub

    Private Sub UltimaFacturaMonica()
        Try
            If varConexionMonica.State = ConnectionState.Open Then
                varConexionMonica.Close()
            End If

            varConexionMonica.Open()

            Dim sqlUtlFactMon As String = String.Format("SELECT MAX(a.nro_factura) AS NumFa FROM factura a INNER JOIN clientes b ON a.cliente_id = b.cliente_id WHERE b.codigo_clte = '{0}' AND a.fecha_emision >= '12/1/2013'", Me.txtCodigoCliente.Text)
            Dim cmdUltFactMon As New SqlCommand(sqlUtlFactMon, varConexionMonica)
            Dim readerUltFactMon As SqlDataReader = cmdUltFactMon.ExecuteReader

            If readerUltFactMon.Read = True Then
                If readerUltFactMon.Item("NumFa").ToString = "" Then
                    UltFactMonica = 0
                Else
                    UltFactMonica = CInt(Trim(readerUltFactMon.Item("NumFa").ToString))
                End If
            Else
                MessageBox.Show("No se encuentra este cliente.", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If

            readerUltFactMon.Close()
            varConexionMonica.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub UltimaFacturaLocal()
        Try
            If varConexionMegaStore.State = ConnectionState.Open Then
                varConexionMegaStore.Close()
            End If

            varConexionMegaStore.Open()

            Dim sqlUtlFactLocal As String = String.Format("SELECT MAX(NumFactura) AS NumFactura FROM PuntosFactura WHERE CodCliente = '{0}'", Me.txtCodigoCliente.EditValue)
            Dim cmdUltFactLocal As New SqlCommand(sqlUtlFactLocal, varConexionMegaStore)
            Dim readerUltFactLocal As SqlDataReader = cmdUltFactLocal.ExecuteReader

            If readerUltFactLocal.Read Then
                If IsDBNull(readerUltFactLocal.Item("NumFactura")) Then
                    UltFacturaLocal = 0
                Else
                    UltFacturaLocal = CInt(readerUltFactLocal.Item("NumFactura"))
                End If
            Else
                UltFacturaLocal = 0
            End If

            readerUltFactLocal.Close()
            varConexionMegaStore.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub SincronizarFacturas()
        'Evaluamos las opciones para sincronizar
        If UltFactMonica = UltFacturaLocal Then
            'Cargamos los datos locales
            MostrarPuntosFacturasSincronizadas()
        ElseIf UltFacturaLocal = 0 And UltFactMonica > 0 Then
            'Está vacio el cliente, se debe agregar el cliente y sus facturas correspondientes.
            CargarTodoMonica()
        ElseIf UltFactMonica > UltFacturaLocal Then
            'Agregamos las nuevas facturas del monica a la db local
            CargarNuevasFacturas()
        End If
    End Sub

    Private Sub CargarTodoMonica()
        Dim pruebaFecha As Date
        Dim ValorFact As Double = 0
        Dim vPuntos As Integer = 0
        Dim NombreCliente, Telefono, Celular, Email As String
        Dim NumFact As Integer
        Try
            If varConexionMonica.State = ConnectionState.Open Then
                varConexionMonica.Close()
            End If
            varConexionMonica.Open()

            Dim sql As String = String.Format("SELECT b.nro_factura, c.codigo_clte, c.nombre_clte, c.telefono1, c.telefono2, c.e_mail1, b.total, b.fecha_emision FROM factura b INNER JOIN clientes c ON b.cliente_id = c.cliente_id WHERE c.codigo_clte = '{0}' AND b.fecha_emision >= '12/1/2013'", Me.txtCodigoCliente.Text)
            Dim cmd As New SqlCommand(sql, varConexionMonica)
            Dim reader As SqlDataReader = cmd.ExecuteReader

            Me.gboFacturas.Enabled = True

            Dim conta As Integer = 0

            Me.gvFacturas.SelectAll()
            Me.gvFacturas.DeleteSelectedRows()

            Do While reader.Read = True

                If conta = 0 Then
                    Me.txtNombreCliente.EditValue = Trim(reader.Item("nombre_clte").ToString)
                    If VerificarExisteCliente() = False Then

                        NombreCliente = Trim(reader.Item("nombre_clte").ToString)
                        Telefono = Trim(reader.Item("telefono1").ToString)
                        Celular = Trim(reader.Item("telefono2").ToString)
                        Email = Trim(reader.Item("e_mail1").ToString)
                        Me.ClientesTableAdapter.InsertarCliente(Me.txtCodigoCliente.Text, NombreCliente, Telefono, Celular, Email)
                    End If
                End If

                ValorFact = CDbl(Trim(reader.Item("total").ToString))
                vPuntos = Math.Truncate(ValorFact * 0.03)
                pruebaFecha = Trim(reader.Item("fecha_emision"))
                NumFact = CInt(Trim(reader.Item("nro_factura").ToString))

                Me.gvFacturas.AddNewRow()
                Me.gvFacturas.SetRowCellValue(gvFacturas.FocusedRowHandle, "NumFactura", NumFact)
                Me.gvFacturas.SetRowCellValue(gvFacturas.FocusedRowHandle, "CodCliente", Me.txtCodigoCliente.EditValue)
                Me.gvFacturas.SetRowCellValue(gvFacturas.FocusedRowHandle, "FechaFactura", pruebaFecha)
                Me.gvFacturas.SetRowCellValue(gvFacturas.FocusedRowHandle, "Puntos", vPuntos)
                Me.gvFacturas.SetRowCellValue(gvFacturas.FocusedRowHandle, "Redimido", "0")
                Me.gvFacturas.SetRowCellValue(gvFacturas.FocusedRowHandle, "ValorFactura", ValorFact)
                Me.gvFacturas.UpdateCurrentRow()

                conta += 1

                Me.PuntosFacturaTableAdapter.InsertarPuntosFactura(NumFact, Me.txtCodigoCliente.EditValue, pruebaFecha, vPuntos, 0, ValorFact)
            Loop

            If conta = 0 Then
                MessageBox.Show("No se ha encontrado ninguna factura.", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Error)
                Me.txtNombreCliente.EditValue = Nothing
            End If

            Me.gvFacturas.SelectAll()

            reader.Close()
            varConexionMonica.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub CargarNuevasFacturas()
        Dim pruebaFecha As Date
        Dim ValorFact As Double = 0
        Dim vPuntos As Integer = 0
        Dim NombreCliente, Telefono, Celular, Email As String
        Dim NumFact As Integer
        Try
            If varConexionMonica.State = ConnectionState.Open Then
                varConexionMonica.Close()
            End If
            varConexionMonica.Open()

            Dim sql As String = String.Format("SELECT b.nro_factura, c.codigo_clte, c.nombre_clte, c.telefono1, c.telefono2, c.e_mail1, b.total, b.fecha_emision FROM factura b INNER JOIN clientes c ON b.cliente_id = c.cliente_id WHERE c.codigo_clte = '{0}' AND b.nro_factura > {1}", Me.txtCodigoCliente.Text, UltFacturaLocal)
            Dim cmd As New SqlCommand(sql, varConexionMonica)
            Dim reader As SqlDataReader = cmd.ExecuteReader

            Me.gboFacturas.Enabled = True

            Dim conta As Integer = 0

            Me.gvFacturas.SelectAll()
            Me.gvFacturas.DeleteSelectedRows()

            Do While reader.Read = True

                If conta = 0 Then
                    Me.txtNombreCliente.EditValue = Trim(reader.Item("nombre_clte").ToString)

                End If

                ValorFact = CDbl(Trim(reader.Item("total").ToString))
                vPuntos = Math.Truncate(ValorFact * 0.03)
                pruebaFecha = Trim(reader.Item("fecha_emision"))
                NumFact = CInt(Trim(reader.Item("nro_factura").ToString))

                conta += 1

                Me.PuntosFacturaTableAdapter.InsertarPuntosFactura(NumFact, Me.txtCodigoCliente.EditValue, pruebaFecha, vPuntos, 0, ValorFact)
            Loop

            Me.PuntosFacturaTableAdapter.FillBy(Me.MEGASTOREDataSet.PuntosFactura, Me.txtCodigoCliente.EditValue)

            If conta = 0 Then
                MessageBox.Show("No se ha encontrado ninguna factura.", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Error)
                Me.txtNombreCliente.EditValue = Nothing
            End If

            Me.gvFacturas.SelectAll()

            reader.Close()
            varConexionMonica.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Function VerificarExisteCliente() As Boolean
        Try
            If varConexionMegaStore.State = ConnectionState.Open Then
                varConexionMegaStore.Close()
            End If
            varConexionMegaStore.Open()

            Dim sql As String = String.Format("SELECT COUNT(*) AS Total FROM Clientes WHERE CodCliente ='{0}'", Me.txtCodigoCliente.EditValue)
            Dim cmd As New SqlCommand(sql, varConexionMegaStore)
            Dim reader As SqlDataReader = cmd.ExecuteReader

            If reader.Read Then
                If CInt(reader.Item("Total")) >= 1 Then
                    Return True
                Else
                    Return False
                End If
            Else
                Return True
            End If
            varConexionMegaStore.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

        Return True

    End Function

    Private Sub MostrarPuntosFacturasSincronizadas()
        Try
            If varConexionMonica.State = ConnectionState.Open Then
                varConexionMonica.Close()
            End If
            varConexionMonica.Open()

            Dim sql As String = String.Format("SELECT nombre_clte FROM clientes WHERE codigo_clte = '{0}'", Me.txtCodigoCliente.Text)
            Dim cmd As New SqlCommand(sql, varConexionMonica)
            Dim reader As SqlDataReader = cmd.ExecuteReader

            Me.gboFacturas.Enabled = True


            Me.gvFacturas.SelectAll()
            Me.gvFacturas.DeleteSelectedRows()

            If reader.Read Then
                Me.txtNombreCliente.EditValue = Trim(reader.Item("nombre_clte").ToString)
            End If

            Me.gboFacturas.Enabled = True
            Me.PuntosFacturaTableAdapter.FillBy(Me.MEGASTOREDataSet.PuntosFactura, Me.txtCodigoCliente.EditValue)

            reader.Close()
            varConexionMonica.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub txtCodigoCliente_KeyDown(sender As Object, e As KeyEventArgs) Handles txtCodigoCliente.KeyDown
        If e.KeyCode = Keys.Enter Then
            If Me.txtCodigoCliente.EditValue IsNot Nothing Then
                'Llamamos a buscar
                UltimaFacturaMonica()
                UltimaFacturaLocal()
                SincronizarFacturas()
            Else
                Me.txtCodigoCliente.BackColor = Color.LemonChiffon
                MessageBox.Show("Ingrese el codigo del cliente.", varTitulo, MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Me.txtCodigoCliente.Focus()
            End If
        End If
    End Sub

    Private Sub btnCanjear_Click(sender As Object, e As EventArgs) Handles btnCanjear.Click
        Dim resp As String = MessageBox.Show("¿Desea canjear estas facturas por puntos?", varTitulo, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)

        If resp = vbYes Then
            Dim i As Integer
            For i = 0 To gvFacturas.SelectedRowsCount() - 1
                If (gvFacturas.GetSelectedRows()(i) >= 0) Then
                    PuntosFacturaTableAdapter.SP_SetRedimido(Date.Now.Date, CInt(Me.gvFacturas.GetRowCellValue(Me.gvFacturas.GetSelectedRows()(i), colNumFactura)))
                End If
            Next

            Dim reporte As New rptComprobanteCanje()
            reporte.LlenarReporte(Me.txtCodigoCliente.EditValue, Date.Now.Date)

            Dim ReportToolss As New ReportPrintTool(reporte)
            ReportToolss.Report.CreateDocument(False)
            ReportToolss.ShowRibbonPreviewDialog()

            Me.PuntosFacturaTableAdapter.FillBy(Me.MEGASTOREDataSet.PuntosFactura, Me.txtCodigoCliente.EditValue)
        End If
    End Sub
End Class